import Alymodel from "../mysql_interface/model";

export function getGroupedByCatebagArr(data: Alymodel.PackageCatebagRelation[]): Alymodel.GroupedByCatebag[] {
    // 按课程包分组
    const groupedByCatebagObj: { [cID: number]: Alymodel.GroupedByCatebag } = {};
    data.forEach(pkg => {
        pkg.packege.forEach(pkgItem => {
            const courseCatebag = pkgItem.course.coursecatebag;
            if (!courseCatebag || courseCatebag.length === 0) return;

            courseCatebag.forEach(catebagItem => {
                const cID = Number(catebagItem.catebag.ID);

                if (!groupedByCatebagObj[cID]) {
                    groupedByCatebagObj[cID] = {
                        ...catebagItem.catebag,
                        cID,
                        pkg: [{ pID: pkg.ID, name: pkg.packegeName }],
                        packages: [{
                            ID: pkgItem.course.ID,
                            course_ID: pkgItem.course.ID,
                            pkg: [{ pID: pkg.ID, name: pkg.packegeName }],
                            name: pkgItem.course.name,
                            paixu: pkgItem.course.paixu,
                        }],
                    };
                    return;
                }
                const groupedCatebag = groupedByCatebagObj[cID];

                // 更新外层的 pkg
                if (!groupedCatebag.pkg.some(p => p.pID === pkg.ID)) {
                    groupedCatebag.pkg.push({ pID: pkg.ID, name: pkg.packegeName });
                }

                const existingPackage = groupedCatebag.packages.find(p => p.ID === pkgItem.course.ID);
                if (existingPackage) {
                    if (!existingPackage.pkg.some(p => p.pID === pkg.ID)) {
                        existingPackage.pkg.push({ pID: pkg.ID, name: pkg.packegeName });
                    }
                } else {
                    groupedCatebag.packages.push({
                        ID: pkgItem.course.ID,
                        course_ID: pkgItem.course.ID,
                        name: pkgItem.course.name,
                        paixu: pkgItem.course.paixu,
                        pkg: [{ pID: pkg.ID, name: pkg.packegeName }]
                    });
                }
            });
        });
    });
    const groupedByCatebagArr = Object.values(groupedByCatebagObj).sort((a, b) => (a.paixu || 0) - (b.paixu || 0));
    // console.log("groupedByCatebagArr =>", groupedByCatebagArr);
    return groupedByCatebagArr
}
